package br.com.jdcanado.gae.inforse.controller;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;

import br.com.jdcanado.gae.inforse.model.Cliente;
import br.com.jdcanado.gae.inforse.model.ClienteDAO;
import br.com.jdcanado.gae.inforse.model.Orcamento;
import br.com.jdcanado.gae.inforse.model.OrcamentoDAO;
import br.com.jdcanado.gae.inforse.model.Usuario;
import br.com.jdcanado.gae.inforse.model.ValorOrcamento;
import br.com.jdcanado.gae.inforse.model.ValorOrcamento.CustoFixo;

@ManagedBean(name="clienteMB")
@ApplicationScoped
public class ClienteMB implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;	
	
	private List<Cliente> listaClientes;
	private List<Cliente> filtroClientes;
	private Cliente cliente = new Cliente();
	private Cliente selectedCliente = new Cliente();
			
	public ClienteMB(){
		preencherListaClientes();				
	}

	private List<Cliente> preencherListaClientes(){
		Usuario usuario = (Usuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("currentUser");
		setListaClientes(ClienteDAO.queryClientesByUsuario(usuario));
			
		return listaClientes;
	}	
	
	public void inserirCliente(ActionEvent event){
		Usuario usuario = (Usuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("currentUser");
		getCliente().setUsuario(usuario.getOperador());
		
		ClienteDAO.inserirCliente(cliente);
		
		setListaClientes(ClienteDAO.queryClientesByUsuario(usuario));
		setCliente(new Cliente());
	}
	
	public void prepararInserirCliente(ActionEvent event){
		cliente = new Cliente(); 
	}
	
	public void prepararSolicitarOrcamento(ActionEvent event){		
		if(getSelectedCliente() == null){
			FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_WARN, "Selecione um cliente!", null);
			FacesContext.getCurrentInstance().addMessage(null, fm);
		}else{
			RequestContext.getCurrentInstance().execute("dlgOrcamento.show()");
		}
	}
	
	public void solicitarOrcamento(ActionEvent event){
		Usuario usuario = (Usuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("currentUser");
		// usar este código para exibir a data no fuso horário de Brasília
		//SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
		//sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
		//System.out.print(sdf.format(new Date()));
		
		Orcamento orcamento = new Orcamento();
		orcamento.setDataEmissao(new Date());
		orcamento.setStatus("Em Espera");
		orcamento.setCorStatus("background-color:red;");
		orcamento.setUsuarioEmissao(usuario.getOperador());
		//orcamento.setValorOrcamento(new ValorOrcamento());
		//orcamento.getValorOrcamento().setCustoFixo(new CustoFixo());
		
		OrcamentoDAO.inserirOrcamento(orcamento, getSelectedCliente().getCodigo());		
	}
	
	public void atualizarCliente(ActionEvent event){
		ClienteDAO.atualizarCliente(getSelectedCliente());
		
		setSelectedCliente(new Cliente());
	}	
	
	public void excluirCliente(ActionEvent event){
		Usuario usuario = (Usuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("currentUser");
		ClienteDAO.deletarCliente(getSelectedCliente());
		
		setListaClientes(ClienteDAO.queryClientesByUsuario(usuario));
		setSelectedCliente(new Cliente());
	}

	public List<Cliente> getListaClientes() {
		return listaClientes;
	}

	public void setListaClientes(List<Cliente> listaClientes) {
		this.listaClientes = listaClientes;
	}
	
	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	
	public Cliente getSelectedCliente() {
		return selectedCliente;
	}

	public void setSelectedCliente(Cliente selectedCliente) {
		this.selectedCliente = selectedCliente;
	}

	public List<Cliente> getFiltroClientes() {
		return filtroClientes;
	}

	public void setFiltroClientes(List<Cliente> filtroClientes) {
		this.filtroClientes = filtroClientes;
	}
		
}
